﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FlorDeLiz.BusinessLayer;
using BE = FlorDeLiz.BusinessEntitites;
using FlorDeLiz.Utils;

namespace FlorDeLiz.Cadastro
{
    public partial class ContasPagar : Form
    {
        public ContasPagar()
        {
            InitializeComponent();
        }

        private void ContasPagar_Load(object sender, EventArgs e)
        {
            CarregarGrid();
        }

        private void CarregarGrid()
        {
            contasPagarBindingSource.DataSource = ContasPagarBL.Instancia.ObterContasPagar(null, string.Empty, null, null);
            dgvContas.AutoGenerateColumns = false;
            dgvContas.DataSource = contasPagarBindingSource;
            dgvContas.ClearSelection();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgvContas_SelectionChanged(object sender, EventArgs e)
        {
            if (dgvContas.SelectedRows.Count > 0)
            {
                BE.ContasPagar conta = (BE.ContasPagar)dgvContas.SelectedRows[0].DataBoundItem;

                if (conta != null)
                {
                    txtCodigo.Text = conta.Id.ToString();
                    txtCodigoConta.Text = conta.Codigo;
                    txtDescricao.Text = conta.Descricao;
                    txtValorConta.Text = conta.Valor.ToString();
                    txtValorPago.Text = conta.ValorPago.HasValue ? conta.ValorPago.Value.ToString() : string.Empty;
                    dtpDataPagamento.Value = conta.DataPagmaneto.HasValue ? conta.DataPagmaneto.Value : dtpDataPagamento.MinDate; 
                    dtpDataVencimento.Value = conta.DataVencimento;
                }
            }
            else
            {
                LimparCampos();
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            dgvContas.ClearSelection();
            LimparCampos();
        }

        private void LimparCampos()
        {
            txtCodigoConta.Text = string.Empty;
            txtDescricao.Text = string.Empty;
            txtValorConta.Text = string.Empty;            
            txtValorPago.Text = string.Empty;            
            dtpDataVencimento.Value = DateTime.Now;
            dtpDataPagamento.Value = dtpDataPagamento.MinDate;
            
            lblErrorCodigo.Visible = false;
            lblErrorDescricao.Visible = false;
            lblErrorValorConta.Visible = false;
            lblErrorVencimento.Visible = false;           
        }

        private void btnGravar_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                BE.ContasPagar conta = new BE.ContasPagar();
                int codigo = 0;
                int.TryParse(txtCodigo.Text, out codigo);
                conta.Id = codigo;
                conta.Descricao = txtDescricao.Text.Trim().ToUpper();
                conta.Codigo = txtCodigoConta.Text.Trim().ToUpper();
                conta.DataVencimento = dtpDataVencimento.Value;
                if (dtpDataPagamento.Value == dtpDataPagamento.MinDate)
                {
                    conta.DataPagmaneto = null;
                }
                else
                {
                    conta.DataPagmaneto = dtpDataPagamento.Value;
                }
                decimal valor = 0m;
                decimal.TryParse(txtValorConta.Text, out valor);
                conta.Valor = valor;

                valor = 0m;                
                decimal.TryParse(txtValorPago.Text, out valor);
                if (valor > 0m)
                {
                    conta.ValorPago = valor;
                }
                else
                {
                    conta.ValorPago = null;
                }        

                ContasPagarBL.Instancia.GravarContasPagar(conta);
                CarregarGrid();
            }
        }

        private bool ValidarCampos()
        {
            StringBuilder sb = new StringBuilder();
            if (string.IsNullOrEmpty(txtCodigoConta.Text.Trim()))
            {
                sb.AppendLine("O campo Código é obrigatório!");
                lblErrorCodigo.Visible = true;
            }

            if (string.IsNullOrEmpty(txtDescricao.Text.Trim()))
            {
                sb.AppendLine("O campo Descrição é obrigatório!");
                lblErrorDescricao.Visible = true;
            }

            if (string.IsNullOrEmpty(txtValorConta.Text.Trim()))
            {
                sb.AppendLine("O campo Valor da Conta é obrigatório!");
                lblErrorValorConta.Visible = true;
            }

            if (!string.IsNullOrEmpty(sb.ToString()))
            {
                MessageBox.Show(sb.ToString(), "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }
            else
            {
                return true;
            }
        }

        private void txtValorConta_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !Util.Instancia.ValidarDigito(e.KeyChar);
            if (e.Handled)
            {
                if (!txtValorConta.Text.Contains(','))
                {
                    if (e.KeyChar == ',' || e.KeyChar == '.')
                    {
                        e.KeyChar = ',';
                    }
                    e.Handled = e.KeyChar != ',';
                }
            }
        }

        private void txtValorPago_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !Util.Instancia.ValidarDigito(e.KeyChar);
            if (e.Handled)
            {
                if (!txtValorPago.Text.Contains(','))
                {
                    if (e.KeyChar == ',' || e.KeyChar == '.')
                    {
                        e.KeyChar = ',';
                    }
                    e.Handled = e.KeyChar != ',';
                }
            }
        }

        private void txtPesquisa_TextChanged(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisa.Text.Trim()) && txtPesquisa.Text.Length >= 3)
            {
                List<BE.ContasPagar> contas = new List<BE.ContasPagar>();
                contas = ((List<BE.ContasPagar>)contasPagarBindingSource.DataSource).FindAll(c => c.Descricao.ToUpper().Contains(txtPesquisa.Text.ToUpper().Trim()));
                dgvContas.DataSource = contas;
            }
            else
            {
                dgvContas.DataSource = contasPagarBindingSource.DataSource;
            }
            dgvContas.ClearSelection();
        }  
    }
}
